/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "ui容器部件.h"
#include "UI/ui绘制模板.h"




class C_列表框 : public C_Widget {
	
	E_列表显示模式	m_列表显示模式;
public:
	C_列表框(S_UI渲染环境& ctx, uint8 列数量, E_列表显示模式 模式);
	~C_列表框();

	//S_View属性	m_View属性;
	uint32		m_行高度;
	uint32		m_列数;
	int32		m_有效行显示数量;

	S_Surface2D*	m_背景;
	S_Surface2D*	m_字符;
	S_Surface2D*	m_图标;

	std::vector<S_列表填充数据>		m_列表数据;
	std::vector<S_列表填充数据*>	m_当前选中项;
	bool							m_是否多选;

	fp_列表项选中回调_str			mf_项选中回调;


	C_Widget*	f_创建项组件();
	void		f_填充列表(std::vector<S_列表填充数据>& data);
	C_Widget*	f_addItem(const S_列表填充数据& data, uint32 offset);
	void		f_delItem(S_列表填充数据& data, uint32 offset);
	void		f_clearItem();

	std::vector<std::string> f_构建选中文件(std::string root);

private:

};







class C_下拉列表框 : public C_Widget {

public:
	C_下拉列表框(S_UI渲染环境& ctx, bool 可编辑 = true);
	~C_下拉列表框();

	S_Props		m_列表项;

	//ui_绘制模板_预设图形	m_背景绘制;
	//ui_绘制模板_图标		m_图标绘制;

	C_Widget*	m_文本编辑框;
	C_列表框*	m_列表;
	C_Widget*	m_移除项按钮;
	C_Widget*	m_列表视口;
	fp_PropUpdate	mf_添加项;
	fp_PropUpdate	mf_移除项;

	
	void f_绑定列表数据(S_Props& prop);

};







class C_树形框 : public C_Widget {
	bool m_引用数据;
public:
	C_树形框(S_UI渲染环境& ctx, S_Object* data);
	~C_树形框();

	S_Object*				m_Data;
	S_Object*				m_当前选择项;
	std::vector<S_Object*>	m_选择项;

	fp_项层级计算				mf_自定义子项层级范围计算;
	fp_WidgetCall_CreateWidget	mf_项附件组件创建;

	float32	m_行高度;
	uint32	m_有效行数;
	vec2	m_当前选择项位置;
	bool	m_清除选项;
	//uint16 m_元素属性ID;
	//uint32 m_焦点;
	//std::vector<S_2D图标>	m_图标坐标;
	//uint32 m_高亮;


	S_Surface2D* m_背景;
	S_Surface2D* m_线;
	S_Surface2D* m_标签;
	S_Surface2D* m_图标;


	std::vector<vec2>		m_直线坐标;
	
};

void f_ui_树形框_更新数据添加();





class C_弹出列表框 : public C_Widget {
	bool m_引用数据;
public:
	C_弹出列表框(S_UI渲染环境& ctx, E_布局方式 方式 = E_布局方式::e_网格);
	~C_弹出列表框();

	fp_WidgetCall_CreateWidget	mf_项附件组件创建;

	S_Surface2D* m_线;
	std::vector<vec2>		m_直线坐标;
	std::vector<S_2D图标>	m_图标坐标;

	uint32 m_背景;
	S_Surface2D* m_标题;
	uint32 m_图标;
	uint32 m_高亮;

	//S_Props m_列表;

	void f_绑定属性列表数据(S_Props& prop);

};




//class C_弹出列表选择框 : public C_Widget {
//	bool m_引用数据;
//public:
//	C_弹出列表选择框(S_UI创建环境& ctx);
//	~C_弹出列表选择框();
//
//	fp_项层级计算				mf_自定义子项层级范围计算;
//	fp_WidgetCall_CreateWidget	mf_项附件组件创建;
//
//	float32	m_行高度;
//	uint32	m_有效行数;
//
//	uint16		m_元素属性ID;
//
//
//	uint32 m_焦点;
//
//	uint32 m_线;
//	std::vector<vec2>		m_直线坐标;
//	std::vector<S_2D图标>	m_图标坐标;
//
//	uint32 m_标签;
//
//	uint32 m_图标;
//
//	uint32 m_高亮;
//
//};



class C_弹出列表编辑框 : public C_Widget {
	bool m_引用数据;
public:
	C_弹出列表编辑框(S_UI渲染环境& ctx);
	~C_弹出列表编辑框();

	fp_项层级计算				mf_自定义子项层级范围计算;
	fp_WidgetCall_CreateWidget	mf_项附件组件创建;



	S_Surface2D* m_线;
	std::vector<vec2>		m_直线坐标;
	std::vector<S_2D图标>	m_图标坐标;
	uint32 m_背景;
	S_Surface2D* m_标签;
	uint32 m_图标;
	uint32 m_高亮;


	S_Props m_编辑文本;
	//S_Props m_列表;

	C_Widget* m_拾取按钮;
	C_Widget* m_编辑框;
	C_Widget* m_菜单按钮;

};




